<!DOCTYPE HTML>
<html>
<head>
<title>PixelSearch | AutoHotkey</title>
<meta name="description" content="The PixelSearch command searches a region of the screen for a pixel of the specified color." />
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
</head>
<body>

<h1>PixelSearch</h1>

<p>在屏幕某个区域中搜索指定颜色所在的像素.</p>

<pre class="Syntax"><span class="func">PixelSearch</span>, OutputVarX, OutputVarY, X1, Y1, X2, Y2, ColorID <span class="optional">, Variation, Mode</span></pre>
<h2 id="Parameters">参数</h2>
<dl>

  <dt>OutputVarX, OutputVarY</dt>
  <dd><p>用来保存首个匹配 <em>ColorID</em> 像素的 X 和 Y 坐标(如果没有发现匹配, 则此变量被置空). 坐标相对于活动窗口, 除非曾使用 <a href="CoordMode.htm">CoordMode</a> 改变了这个设置.</p>
    <p>其中一个或两个参数都可以留空, 此时可以使用 ErrorLevel(请参阅下面) 来判断是否找到了匹配.</p></dd>

  <dt>X1, Y1</dt>
  <dd><p>要搜索的矩形区域的起始角的 X 和 Y 坐标, 可以为<a href="../Variables.htm#Expressions">表达式</a>. 坐标相对于活动窗口, 除非曾使用 <a href="CoordMode.htm">CoordMode</a> 改变了这个设置.</p></dd>

  <dt>X2, Y2</dt>
  <dd><p>要搜索的矩形区域的结束角的 X 和 Y 坐标, 可以为<a href="../Variables.htm#Expressions">表达式</a>. 坐标相对于活动窗口, 除非曾使用 <a href="CoordMode.htm">CoordMode</a> 改变了这个设置.</p></dd>

  <dt>ColorID</dt>
  <dd><p>要搜索的十进制或十六进制的颜色 ID, 使用蓝绿红(BGR) 格式, 可以为<a href="../Variables.htm#Expressions">表达式</a>. 颜色 ID 可以使用 Window Spy(可从托盘菜单打开) 或 <a href="PixelGetColor.htm">PixelGetColor</a> 来确定. 例如: <code>0x9d6346</code>.</p></dd>

  <dt>Variation</dt>
  <dd><p>一个介于 0 和 255(包含的) 之间的数字, 用于表示此颜色红/绿/蓝成分强度在每个方向上允许的渐变值(可以为<a href="../Variables.htm#Expressions">表达式</a>). 例如, 如果指定值为 2 并且 <var>ColorID</var> 为 0x444444, 那么从 0x424242 到 0x464646 的任何颜色都将被视为匹配. 此参数用于需要寻找的颜色渐变值可能变化时. 如果指定 255 为浮动的渐变值, 则匹配所有颜色. 默认渐变值为 0.</p></dd>

  <dt>Mode</dt>
  <dd><p>此参数可以包含单词 Fast, RGB 或同时包含两者(同时包含两者时它们之间请用空格分隔; 即 <em>Fast RGB</em>).</p>
      <p id="fast"><strong>Fast</strong>: 使用快速的搜索方法, 在大多数情况下此方法可以明显减少搜索时消耗的 CPU 时间. 尽管此方法支持颜色深度低至 8 位(256 色), 不过在 24 位或 32 位颜色深度下此快速模式执行地更好. 如果屏幕的颜色深度为 16 位或更低, 则 <em>Variation</em> 参数在慢速模式和快速模式的行为可能有轻微的差异. 最后, 快速模式按行搜索屏幕, 而不是按列. 因此, 如果屏幕上有多个匹配的像素, 则快速模式可能找到一个和慢速模式不同的像素.</p>
      <p><strong>RGB</strong>: 把 <em>ColorID</em> 解释为 RGB 值而不是 BGR. 即交换了其中的红色和蓝色的成分.</p></dd>

</dl>

<h2 id="Error_Handling">错误处理</h2>
<p><span class="ver">[v1.1.04+]</span>: 此命令在搜索遇到问题时会抛出异常. 想了解更多信息, 请参阅<a href="Catch.htm#RuntimeErrors">运行时错误</a>.</p>
<p>如果在指定的区域找到指定的颜色, 则 <a href="../misc/ErrorLevel.htm">ErrorLevel</a> 被设置为 0, 没有找到则为 1, 而如果在命令执行过程中遇到问题使搜索无法进行则为 2.</p>

<h2 id="Remarks">备注</h2>
<p>要搜索的目标区域必须是可见的; 换句话说, 无法搜索隐藏在其他窗口背后的窗口区域. 与之相比, 鼠标光标下方的像素颜色通常可以检测出来. 例外情况是游戏的指针, 在大多数情况下它会隐藏在它下方的任何像素.</p>
<p>搜索顺序取决于参数的顺序. 换句话说, 如果 <em>X1</em> 大于 <em>X2</em>, 搜索会从右往左进行, 从列 <em>X1</em> 开始. 类似地, 如果 <em>Y1</em> 大于 <em>Y2</em>, 则从下到上进行搜索. 然而, 在 <span class="ver">[v1.1.32]</span> 之前, 快速模式要求 <em>X1</em> 和 <em>Y1</em> 位于左上角.</p>
<p>快速模式: 搜索从 <em>X1</em> 和 <em>Y1</em> 指定的坐标开始, 并检查从 <em>X1</em> 到 <em>X2</em> 行中的所有像素是否匹配. 如果在该处找不到匹配项, 则搜索将逐行继续到 <em>Y2</em>, 直到找到匹配的像素为止.</p>
<p>慢速模式: 搜索从 <em>X1</em> 和 <em>Y1</em> 指定的坐标开始, 并检查从 <em>Y1</em> 到 <em>Y2</em> 列中的所有像素是否匹配. 如果在该处找不到匹配项, 则搜索将逐列继续到 <em>X2</em>, 直到找到匹配的像素为止.</p>
<p>如果要搜索的区域很大, 并且以高频率重复搜索, 则可能会占用大量的 CPU 时间. 为了减轻这种情况, 请将区域的大小保持最小.</p>

<h2 id="Related">相关</h2>
<p><a href="PixelGetColor.htm">PixelGetColor</a>, <a href="ImageSearch.htm">ImageSearch</a>, <a href="CoordMode.htm">CoordMode</a>, <a href="MouseGetPos.htm">MouseGetPos</a></p>

<h2 id="Examples">示例</h2>
<div class="ex" id="ExBasic">
<p><a class="ex_number" href="#ExBasic"></a> 在活动窗口的区域中搜索一个像素, 并在 <var>Px</var> 和 <var>Py</var> 中存储与指定颜色相匹配(渐变值为 3) 第 1 个像素的 X 和 Y 坐标.</p>
<pre>PixelSearch, Px, Py, 200, 200, 300, 300, 0x9d6346, 3, Fast
if ErrorLevel
    MsgBox, That color was not found in the specified region.
else
    MsgBox, A color within 3 shades of variation was found at X%Px% Y%Py%.</pre>
</div>

</body>
</html>